package hjw.com.controller;


import hjw.com.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 该方法返回值为Boolean类型，如果返回false，表示拦截请求，不在向下执行。而如果返回true，表示放行，程序继续向下进行
     */

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了@@");
        //获取登录 的信息
        User user =(User) request.getSession().getAttribute("user");
        //判断登录信息 是否正常
        if(user!=null){
            //获取请求头
            String servletPath = request.getServletPath();//   "/**/go2Update"

            //打印请求头
            System.out.println("servletPath = " + servletPath);

            //截取请求头信息
            String[] split = servletPath.split("/");

            //得到身份权限 “tea/stu/adm”
            String nowRole =split[1];

            //判断当前权限与地址头的权限是否一致
            if (nowRole.equals(user.getRole())) return true;//放行

            //不是则进行数据提示响应，返回
            request.setAttribute("state","无权限");
            //转发
            request.getRequestDispatcher("/home/main").forward(request,response);
            return false;
        }

        System.out.println("用户没有登录，准备转发到登录界面");

        //重新定向转发的头为：....
        response.sendRedirect("/home/main");
        return false;
    }

    /**
     * 该方法触发在请求已被控制器处理完毕，返回视图之前，不是很常用，通常是用来完善处理器结果的

     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 这个方法在控制器视图解析全部完成之后，最后执行，通常用来做一些扫尾工作，基本不用
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

